package com.iflytek.controller;

import com.iflytek.pojo.Emp;
import com.iflytek.service.EmpService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Controller
@RequestMapping("/emp")
public class EmpController {
    // 需要empService
    @Autowired
    private EmpService empService;
    @RequestMapping("/getMyEmps")
    public String getAllEmp(Model model){
        try {
            List<Emp> allEmp = empService.findAllEmp();
            model.addAttribute("allEmp",allEmp);
        } catch (Exception e) {
            e.printStackTrace();
        }
        // 跳转至main 页面
        return "main1";
    }

    @RequestMapping("getAllEmp")
    public String getAllEmp2(Model model){
        try {
            List<Emp> allEmp = empService.selAllEmp();
            model.addAttribute("allEmp",allEmp);
        } catch (Exception e) {
            e.printStackTrace();
        }
        // 跳转至main 页面
        return "test";
    }
    // 联合查询
    //    @RequestMapping("/getAll")
    //    public String selAllEmp(Model model){
    //        try {
    //            List<Emp> allEmp = empService.getAllEmp();
    //            model.addAttribute("allEmp",allEmp);
    //        } catch (Exception e) {
    //            e.printStackTrace();
    //        }
    //        return "test1";
    //    }
    @RequestMapping("/getAll")
    @ResponseBody
    //@ResponseBody 让方法返回值变成json 数据，所有前端需要拿到的值都需要封装成json数据，无论是是string, 数组，集合等
    // 增加前端返回的参数,page ~ limit //这里对应 EmpMapper.xml 文件的里的分页查询的两个形参
    public Map selAllEmp(Model model,Integer page, Integer limit) throws Exception {
        // 按照 layui 的格式封装数据
        Map<String, Object> map = null;
        List<Emp> allEmp = empService.getAllEmp(page, limit);
         /*
         返回到前端，layui需要的数据格式
         code:0,
         msg:"", // 非必须，可以不写（作用是做一个消息提示）
         count:1000, // 总数据量
         data:[{},{},{}] // 真正的数据
          */
        model.addAttribute("allEmp", allEmp);
        map = new HashMap<String, Object>();
        map.put("code", 0);
        //map.put("msg","");
        // 从数据库获取所有员工数量,注意使用分页查询之后，allEmp 拿到的是limit之后的 数量，并不代表全表查询
        // 所以 allEmp.size() 拿到的只是部分结果!!
        //  定义方法，返回 数据表emp 总数据量
        int count = empService.getCount();
        map.put("count",count); // 可以写死,这里自动获取 List 列表的大小
        map.put("data", allEmp);
        return map;
    }
    // 添加员工
    @RequestMapping("/addEmp")
    @ResponseBody
    //@ResponseBody 让方法返回值变成json 数据，所有前端需要拿到的值都需要封装成json数据，无论是是string, 数组，集合等
    public String add(Emp emp){
        // 0 表示添加失败
        String flag = "0";
        try {
            empService.addEmp(emp);
            // 添加成功之后，变为flag = 1
            flag = "1";
        } catch (Exception e) {
            e.printStackTrace();
        }
        return flag;
    }
    // 修改员工
    @RequestMapping("/updateEmp")
    @ResponseBody
    public String updateEmp(Emp emp){
        String flag = "0";
        try {
            empService.updateEmp(emp);
            flag = "1";
        } catch (Exception e) {
            e.printStackTrace();
        }
        return flag;
    }
    // 删除员工信息
    @RequestMapping("deleteEmp")
    @ResponseBody
    public String deleteEmp(Emp emp){
        String flag = "0";
        try {
            empService.deleteEmp(emp);
            flag = "1";
        } catch (Exception e) {
            e.printStackTrace();
        }
        return flag;
    }
    // 查询员工信息,将查询结果同样封装成一个map 集合
    // 这里的函数 需要接收到 前端传过来的 一个 empno 值,所以必须给他参数
    @RequestMapping("searchEmp")
    @ResponseBody
    public Map searchEmp(Emp num) throws Exception {
        // 根据员工编号 查询员工信息
        // 定义一个集合，初始值为空
        Map<String, Object> map = null;
        List<Emp> emp = empService.searchEmp(num);
        map = new HashMap<String, Object>();
        // 向map 集合里面放数据
        map.put("code", 0);
        map.put("count",emp.size()); // 每次查询应该是没有/ 一条数据 size() == 0 / 1
        map.put("data", emp);        // 返回结果是一个用 json 封装好的map 结构
        return map;
    }
}
